package com.xw.bo.ks.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;

import java.util.Collection;
import java.util.Date;

/**
 * 用于分表的逻辑处理
 * @author： XW -> ~
 * @create： 2023/11/8 10:21
 */
@Slf4j
public class TableShardingAlgor implements PreciseShardingAlgorithm<Integer> {


    @Override
    public String doSharding(Collection<String> collection, PreciseShardingValue<Integer> preciseShardingValue) {

        // 真实节点
        collection.stream().forEach((item) -> {
            log.debug("actual node table:{}", item);
        });

        Integer orderCreateTime = preciseShardingValue.getValue();
        long orderCreateTimeLong =  (long)(orderCreateTime) * 1000;
        // 精确分片
//        log.debug("column value:{}", orderCreateTimeLong);

        // 获取基础表名
        String tb_name = preciseShardingValue.getLogicTableName();
        // 根据当前日期来分表

        String format = DateUtils.formatDateToString(new Date(orderCreateTimeLong), DateUtils.DATE_PATTERN_MONTH);

        // 选择表 基础表+分表名称
        tb_name = tb_name + format;
//        log.debug("tb_name: {}" , tb_name);

        // 进行匹配
        for (String each : collection) {
//            log.debug("ks_open_order_cursor_lists: {}" , each);
            if (each.equals(tb_name)) {
                // 匹配成功开始对这个表进行数据的插入
                return each;
            }
        }

        throw new IllegalArgumentException("没有分到任何一张表，应该进入的表是：" + tb_name);

    }


}
